/*************************************************************************
	> File Name: oj-240_graph_x.cpp
	> Author: Wang Bo
	> Mail: 1276106221@qq.com
	> Created Time: 2020年11月15日 星期日 14时19分11秒
 ************************************************************************/

#include <iostream>
using namespace std;

int num[10] = {0, 1};
//定义一个3000*3000的画布
char mmap[3000][3000];

//递推出每一个n图形的边长
void init() {
    for (int i = 2; i <= 7; ++i) {
        num[i] = num[i - 1] * 3;
    }
}

void func(int x, int y, int n) {
    //递归边界
    //如果n为1，在1，1输出一个X，递归结束
    if (n == 1) {
        mmap[x][y] = 'X';
        return ;
    }
    //开始递归
    //在x,y点画一个n-1号的图形
    func(x, y, n - 1);
    //在x,y+num[n]/3*2点画一个n-1号的图形
    func(x, y + num[n] / 3 * 2, n - 1);
    func(x + num[n] / 3 * 2, y, n - 1);
    func(x + num[n] / 3, y + num[n] / 3, n - 1);
    func(x + num[n] / 3 * 2, y + num[n] / 3 * 2, n - 1);
    //其实就是递归计算出中心点
    //在中心点和四角标一个X
}

int main() {
    init();
    func(1, 1, 7);
    int t ;
    while (cin >> t) {
        if (t == -1) {
            break;
        }
        for (int i = 1; i <= num[t]; ++i) {
            for (int j = 1; j <= num[t]; ++j) {
                if (mmap[i][j] == 'X') cout << 'X';
                else cout << ' ';
            }
            cout << endl;
        }
        cout << '-' << endl;
    }
    return 0;
}
